/***************************************************
 @Name :        小铭同学
 @Time :        2025-09-03
 @Email :       LiaoMingWJ233@163.com
 @Comment :     对话窗口： 头像 昵称 消息气泡 创建
 @FileName :    chatmessageitem.cpp
 @Version :     1.0
****************************************************/


#include "chatmessageitem.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QResizeEvent>
#include <QFontMetrics>
#include <QDebug>

ChatMessageItem::ChatMessageItem(QWidget *parent, MessageType type)
    : QWidget(parent)
    , m_type(type)
{
    initUI();
}

void ChatMessageItem::initUI()
{
    // 创建头像标签 - 50x50
    m_avatarLabel = new QLabel(this);
    m_avatarLabel->setFixedSize(50, 50);    // 头像大小改为50x50
    m_avatarLabel->setScaledContents(true); // 图片缩放适应标签
    m_avatarLabel->setStyleSheet("border-radius: 25px;"); // 圆角半径改为25px以适应50x50
    
    // 创建昵称标签
    m_nicknameLabel = new QLabel(this);
    m_nicknameLabel->setStyleSheet("color: gray; font-size: 12px;");
    
    // 创建内容标签
    m_contentLabel = new QLabel(this);
    m_contentLabel->setStyleSheet("background-color: #e0e0e0; padding: 8px; border-radius: 4px;");
    m_contentLabel->setWordWrap(true); // 允许文本换行
    m_contentLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); // 文本可选
    
    // 根据消息类型设置不同布局
    updateLayout();
}

void ChatMessageItem::setMessage(const QString &nickname, const QString &content, const QPixmap &avatar)
{
    m_nickname = nickname;
    m_content = content;
    m_avatar = avatar;
    
    // 设置头像 - 缩放为50x50
    m_avatarLabel->setPixmap(avatar.scaled(m_avatarLabel->size(), 
                                         Qt::KeepAspectRatio, 
                                         Qt::SmoothTransformation));
    
    // 设置昵称和内容
    m_nicknameLabel->setText(nickname);
    m_contentLabel->setText(content);
    
    // 更新布局
    updateLayout();
}

void ChatMessageItem::updateLayout()
{
    // 清除现有布局
    if (layout()) {
        delete layout();
    }
    
    QHBoxLayout *mainLayout = new QHBoxLayout(this);
    mainLayout->setContentsMargins(10, 5, 10, 5); // 设置边距
    
    // 左侧消息布局
    if (m_type == MessageType_Left) {
        // 左侧：头像 | 昵称+内容
        mainLayout->addWidget(m_avatarLabel);
        
        QVBoxLayout *rightLayout = new QVBoxLayout();
        rightLayout->addWidget(m_nicknameLabel);
        rightLayout->addWidget(m_contentLabel);
        rightLayout->setSpacing(2);
        
        mainLayout->addLayout(rightLayout);
        mainLayout->setAlignment(rightLayout, Qt::AlignLeft);
        
        // 左侧消息样式
        m_contentLabel->setStyleSheet("background-color: #e0e0e0; padding: 8px; border-radius: 4px;");
    } 
    // 右侧消息布局
    else {
        // 右侧：昵称+内容 | 头像
        QVBoxLayout *leftLayout = new QVBoxLayout();
        leftLayout->addWidget(m_nicknameLabel);
        leftLayout->addWidget(m_contentLabel);
        leftLayout->setSpacing(2);
        
        mainLayout->addLayout(leftLayout);
        mainLayout->addWidget(m_avatarLabel);
        mainLayout->setAlignment(leftLayout, Qt::AlignRight);
        
        // 右侧消息样式
        m_contentLabel->setStyleSheet("background-color: #90caf9; padding: 8px; border-radius: 4px;");
        m_nicknameLabel->setAlignment(Qt::AlignRight);
    }
    
    // 设置布局对齐方式
    mainLayout->setAlignment(m_avatarLabel, Qt::AlignTop);
}

int ChatMessageItem::calculateHeight() const
{
    // 计算内容标签需要的高度
    QFontMetrics metrics(m_contentLabel->font());
    int textWidth = width() - 70; // 总宽度减去头像(50)和边距(20)
    QRect textRect = metrics.boundingRect(0, 0, textWidth, 0, 
                                        Qt::TextWordWrap, m_content);
    
    // 返回头像高度（50）加上一些边距，取较大值
    return qMax(50, textRect.height() + 40); // 40是昵称高度和边距
}

void ChatMessageItem::resizeEvent(QResizeEvent *event)
{
    QWidget::resizeEvent(event);
    // 调整大小时重新计算高度
    setFixedHeight(calculateHeight());
}
